/**
 * 应用全局配置文件
 * 统一管理应用的配置信息
 */



// 环境配置
const ENV = {
	// 开发环境
	development: {
		// 统一使用完整URL，确保所有环境都指向正确的后端服务
		API_BASE_URL: 'http://localhost:8082',
		DEBUG: true,
		LOG_LEVEL: 'debug'
	},
	// 测试环境
	testing: {
		API_BASE_URL: 'http://test.asurada.com:8082',
		DEBUG: true,
		LOG_LEVEL: 'info'
	},
	// 生产环境
	production: {
		API_BASE_URL: 'http://139.199.227.184:8082',
		DEBUG: false,
		LOG_LEVEL: 'error'
	}
}

// 当前环境（可以通过构建工具动态设置）
const CURRENT_ENV = 'production'

// 当前环境配置
const CONFIG = ENV[CURRENT_ENV]

// 应用配置
const APP_CONFIG = {
	// 应用信息
	APP_NAME: 'Asurada应用',
	APP_VERSION: '1.0.0',
	
	// API配置
	API_BASE_URL: CONFIG.API_BASE_URL,
	API_TIMEOUT: 10000,
	
	// 存储配置
	STORAGE_PREFIX: 'asurada_',
	TOKEN_KEY: 'user_token',
	USER_INFO_KEY: 'user_info',
	
	// 登录配置
	LOGIN_EXPIRE_DAYS: 7, // 登录过期天数
	AUTO_REFRESH_TOKEN: true, // 是否自动刷新令牌
	
	// 验证码配置
	SMS_CODE_LENGTH: 6, // 验证码长度
	SMS_CODE_EXPIRE: 300, // 验证码过期时间（秒）
	SMS_RESEND_INTERVAL: 60, // 重发间隔（秒）
	
	// 密码配置
	PASSWORD_MIN_LENGTH: 6, // 密码最小长度
	PASSWORD_MAX_LENGTH: 20, // 密码最大长度
	PASSWORD_REQUIRE_UPPERCASE: false, // 是否需要大写字母
	PASSWORD_REQUIRE_LOWERCASE: false, // 是否需要小写字母
	PASSWORD_REQUIRE_NUMBER: false, // 是否需要数字
	PASSWORD_REQUIRE_SPECIAL: false, // 是否需要特殊字符
	
	// UI配置
	THEME: {
		PRIMARY_COLOR: '#4e5eff',
		SECONDARY_COLOR: '#8a8a9a',
		SUCCESS_COLOR: '#52c41a',
		WARNING_COLOR: '#faad14',
		ERROR_COLOR: '#ff4757',
		BACKGROUND_COLOR: '#1e2433',
		CARD_BACKGROUND: '#2a304d'
	},
	
	// 调试配置
	DEBUG: CONFIG.DEBUG,
	LOG_LEVEL: CONFIG.LOG_LEVEL
}

// 页面路径配置
const PAGES = {
	INDEX: '/pages/index/index',
	LOGIN: '/pages/login/login',
	REGISTER: '/pages/register/register',
	USER: '/pages/user/user'
}

// API接口路径配置（与后端LoginController保持一致）
const API_PATHS = {
	// 认证相关（后端LoginController已实现的接口）
	LOGIN: '/asurada/login',           // 获取登录授权码
	TOKEN: '/asurada/token',           // 获取登录令牌
	LOGIN_BY_CODE: '/asurada/loginByPhoneAndCode', // 验证码登录
	LOGOUT: '/asurada/logout',
	REFRESH_TOKEN: '/asurada/refresh',
	VERIFY_TOKEN: '/asurada/verify',
	VERIFY_IMSESSION_TOKEN: '/asurada/verifyImSessionToken',
	CHECK_LOGIN_STATUS: '/asurada/status',
	
	// 用户管理（待后端实现的接口）
	REGISTER: '/user/register',
	SEND_SMS: '/asurada/sendPhoneCode',
	VERIFY_SMS: '/asurada/verify-sms',
	
	// 聊天助手相关（后端AssistantController已实现的接口）
	GET_CHAT_HISTORY: '/assistant/getChatHistory',
	CHAT: '/assistant/chat',
	STREAM_CHAT: '/assistant/streamChat', // 流式聊天接口
	
	// 其他功能（待后端实现）
	UPLOAD: '/asurada/api/upload',
	FEEDBACK: '/asurada/api/feedback'
}

// 错误码配置
const ERROR_CODES = {
	SUCCESS: 200,
	BAD_REQUEST: 400,
	UNAUTHORIZED: 401,
	FORBIDDEN: 403,
	NOT_FOUND: 404,
	INTERNAL_ERROR: 500,
	
	// 业务错误码
	INVALID_PHONE: 1001,
	INVALID_EMAIL: 1002,
	INVALID_PASSWORD: 1003,
	USER_NOT_FOUND: 1004,
	USER_ALREADY_EXISTS: 1005,
	INVALID_CODE: 1006,
	CODE_EXPIRED: 1007,
	LOGIN_FAILED: 1008,
	TOKEN_EXPIRED: 1009
}

// 错误消息配置
const ERROR_MESSAGES = {
	[ERROR_CODES.BAD_REQUEST]: '请求参数错误',
	[ERROR_CODES.UNAUTHORIZED]: '未授权访问',
	[ERROR_CODES.FORBIDDEN]: '访问被禁止',
	[ERROR_CODES.NOT_FOUND]: '资源不存在',
	[ERROR_CODES.INTERNAL_ERROR]: '服务器内部错误',
	
	[ERROR_CODES.INVALID_PHONE]: '手机号格式不正确',
	[ERROR_CODES.INVALID_EMAIL]: '邮箱格式不正确',
	[ERROR_CODES.INVALID_PASSWORD]: '密码格式不正确',
	[ERROR_CODES.USER_NOT_FOUND]: '用户不存在',
	[ERROR_CODES.USER_ALREADY_EXISTS]: '用户已存在',
	[ERROR_CODES.INVALID_CODE]: '验证码错误',
	[ERROR_CODES.CODE_EXPIRED]: '验证码已过期',
	[ERROR_CODES.LOGIN_FAILED]: '登录失败',
	[ERROR_CODES.TOKEN_EXPIRED]: '登录已过期'
}

// 正则表达式配置
const REGEX = {
	PHONE: /^1[3-9]\d{9}$/, // 中国大陆手机号
	EMAIL: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/, // 邮箱
	PASSWORD: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d@$!%*?&]{8,}$/, // 密码（至少8位，包含大小写字母和数字）
	USERNAME: /^[a-zA-Z0-9_]{3,20}$/, // 用户名（3-20位，只能包含字母、数字和下划线）
	CODE: /^\d{6}$/ // 6位数字验证码
}

// 工具函数
const utils = {
	/**
	 * 获取完整的API URL
	 * @param {String} path API路径
	 * @returns {String} 完整URL
	 */
	getApiUrl(path) {
		return APP_CONFIG.API_BASE_URL + path
	},
	
	/**
	 * 获取存储键名
	 * @param {String} key 键名
	 * @returns {String} 带前缀的键名
	 */
	getStorageKey(key) {
		return APP_CONFIG.STORAGE_PREFIX + key
	},
	
	/**
	 * 获取错误消息
	 * @param {Number} code 错误码
	 * @returns {String} 错误消息
	 */
	getErrorMessage(code) {
		return ERROR_MESSAGES[code] || '未知错误'
	},
	
	/**
	 * 日志输出
	 * @param {String} level 日志级别
	 * @param {String} message 消息
	 * @param {*} data 数据
	 */
	log(level, message, data = null) {
		if (!APP_CONFIG.DEBUG) return
		
		const levels = ['debug', 'info', 'warn', 'error']
		const currentLevelIndex = levels.indexOf(APP_CONFIG.LOG_LEVEL)
		const logLevelIndex = levels.indexOf(level)
		
		if (logLevelIndex >= currentLevelIndex) {
			const timestamp = new Date().toLocaleString()
			const logMessage = `[${timestamp}] [${level.toUpperCase()}] ${message}`
			
			if (data) {
				console[level](logMessage, data)
			} else {
				console[level](logMessage)
			}
		}
	}
}

// 导出配置
export {
	APP_CONFIG,
	PAGES,
	API_PATHS,
	ERROR_CODES,
	ERROR_MESSAGES,
	REGEX,
	utils
}

export default {
	APP_CONFIG,
	PAGES,
	API_PATHS,
	ERROR_CODES,
	ERROR_MESSAGES,
	REGEX,
	utils
}